package com.ibeeking.gmc.global.g.rest.service;

import com.ibeeking.found.common.entity.AreaDTO;
import com.ibeeking.found.common.entity.AreaSimpleDTO;
import com.ibeeking.gmc.global.api.common.query.AreaQuery;
import com.ibeeking.gmc.global.service.common.bo.AreaBO;
import com.ibeeking.gmc.global.service.common.param.AreaParam;
import com.ibeeking.gmc.global.service.common.query.AreaPageQuery;
import com.ibeeking.gmc.global.service.common.vo.AreaPageVO;
import com.ibeeking.gmc.global.service.common.vo.AreaTreeVO;
import com.ibeeking.gmc.global.service.common.vo.AreaVO;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

import java.util.List;


/**
 * IAreaService
 *
 * @Author ibeeking
 * @Date 2020-12-23 13:43
 */
public interface IAreaService {

    /**
     * 地区分页查询
     *
     * @param areaPageQuery
     * @return
     */
    Page<AreaPageVO> pageList(AreaPageQuery areaPageQuery);

    /***
     * 新增
     */
    Boolean add(AreaParam areaParam);

    /***
     * 修改
     */
    Boolean modify(AreaParam areaParam);

    /***
     * 通过id查询
     */
    AreaVO view(Long id);

    AreaVO areaInfoByCode(String code);

    AreaBO queryById(Long id);

    AreaBO queryByCode(String code);

    /***
     * 修改状态
     */
    Boolean changeStatus(Long id, Integer status, Long userId);

    /***
     * 通过id删除
     */
    Boolean del(Long id);

    /**
     * 编码校验
     *
     * @param code
     * @param parentCode
     * @return
     */
    Long checkCode(String code, String parentCode);

    /**
     * 通过上级编码查询所有有效地区
     *
     * @param parentCode
     * @return
     */
    List<AreaPageVO> listByParentCode(String parentCode);

    /**
     * 通过上级编码查询所有有效地区
     *
     * @param parentCode
     * @return
     */
    List<AreaTreeVO> treeListByParentCode(String parentCode);

    List<AreaPageVO> treeList(String parentCode);

    /**
     * 根据编码查询
     *
     * @param code
     * @return
     */
    AreaDTO queryName(String code);

    /**
     * 根据id查询
     *
     * @param id
     * @return
     */
    AreaDTO queryAreaName(Long id);

    /**
     * 根据编码列表查询
     *
     * @param codes
     * @return
     */
    List<AreaDTO> queryNames(List<String> codes);

    List<AreaDTO> queryNamesByParentCode(String code);

    List<AreaDTO> queryArea(AreaQuery areaQuery);


    List<AreaSimpleDTO> listByAreaIds(List<Long> ids);

    AreaSimpleDTO listByAreaCode(String code);

/*
*   List<String> codes 必须是同级别的，都是市或者都是区
 */
    List<AreaDTO> queryLowerAreasByCode(List<String> codes, List<AreaDTO> dtos,Boolean flag);
}
